<?php
/**
 * Controleur de la fonctionnalité "Gérer les opérations"
 *
 */
    defined('_JEXEC') or die('Acces interdit');
    require_once CUSTOM_PATH_PHP_LIB.DS.'helper.php';
		
    class OperationsController {
        
        //initialisation du controleur
        function __construct() {
            
        }
        
        // afficher la vue
        function display($customAction = '') {
            
            switch ($customAction) {
                case 'creeroperation':
                    require_once CUSTOM_PATH_OPERATIONS.DS.'viewcreeroperation.php';
                    $res = AmapHelper::creerProduitsPourContrats();
                    break;
                
                case 'listeroperations':
                    $titrePage = "Opérations en cours de souscription";
                    require_once CUSTOM_PATH_OPERATIONS.DS.'viewlisteroperations.php';
                    break;
                
                case 'listeroperationsafinaliser':
                    $titrePage = "Opérations à finaliser";
                    require_once CUSTOM_PATH_OPERATIONS.DS.'viewlisteroperationsafinaliser.php';
                    break;
                
                case 'finaliseroperation':
                    $titrePage = "Finaliser une opération";
                    require_once CUSTOM_PATH_OPERATIONS.DS.'viewfinaliseroperation.php';
                    break;
                
                default:
                    break;
            }
            
            
        }
        
        //crée une opération et renvoie un message de statut
        function creerOperation () {

            //Création des objets composant l'opération
            $jinput = JFactory::getApplication()->input;
            $jsonParams = $jinput->get('params', '[]', 'STRING');
            $params = json_decode($jsonParams, true);
            $parentCategorie = AmapHelper::getAmapObjectId(ERoleObjet::ERoleObjetFamilleOperations,$params['codeFamille']);
            
            //remet à jour la liste des produits utilisables dans les contrats
            //$res = AmapHelper::creerProduitsPourContrats();
            
            //création de la categorie d'évenement correspondant à l'opération
            $name = PREFIXE_NOM_OPERATION." ".$params['codeFamille']." ".$params['moisDebut']."-".$params['anneeDebut']."=>".$params['moisFin']."-".$params['anneeFin'];
            $metakey = ECaracObjet::ECaracObjetRole."=".ERoleObjet::ERoleObjetOperation;
            $metakey.= ";".ECaracObjet::ECaracObjetCodeOperation."=".hash("adler32", $name.date(DATE_W3C));
            $nouvelleCategorieId = AmapHelper::createEventCategory($parentCategorie, $name, $params['libelleOperation'],1,1,1,NULL,$metakey);
            
            //nombre de cheques autorisés pour ce contrat
            $customFields = '';
            if ($params['cheque1'] !== '') {
                $customFields = 'cheque1='.$params['cheque1'];              
            } else {
                $customFields = $params['dateFinSouscription'];
            }
            if ($params['cheque2'] !== '') $customFields .= NEW_LINE.'cheque2='.$params['cheque2'];
            if ($params['cheque3'] !== '') $customFields .= NEW_LINE.'cheque3='.$params['cheque3'];        
                                    
            //création des evenements correspondants aux distributions            
            $compteur = 0;
            $currentUser = JFactory::getUser()->get('id');
            $parentCategories = [$nouvelleCategorieId];
            $metakey = ECaracObjet::ECaracObjetRole."=".ERoleObjet::ERoleObjetDistribution;
            foreach ($params['datesDistribution'] as $dateDistribution){
                if ($compteur === 0) $premiereDistribution = $dateDistribution;
                $compteur++;
                AmapHelper::createEvent(PREFIXE_EVENEMENT_DISTRIBUTION.$compteur, $parentCategories, $dateDistribution, $dateDistribution, $currentUser, 1, Null, 1, $dateDistribution,1, $metakey);
            }
            
            //création de l'evenement de suivi de l'opération
            $name = '@'.PREFIXE_SUIVI_OPERATION;
            $metakey = ECaracObjet::ECaracObjetRole."=".ERoleObjet::ERoleObjetSuiviOperation;
            AmapHelper::createEvent($name, $parentCategories, $premiereDistribution, $dateDistribution, $currentUser, 1, $params['dateFinSouscription'], 1, $dateDistribution,1, $metakey, $customFields);
            
            //création de l'evenement de fin de l'opération
            $name = '@'.PREFIXE_EVENEMENT_FIN_OPERATION;
            $metakey = ECaracObjet::ECaracObjetRole."=".ERoleObjet::ERoleObjetFinOperation;
            AmapHelper::createEvent($name, $parentCategories, $dateDistribution, $dateDistribution, $currentUser, 1, $dateDistribution, 1, $dateDistribution,1, $metakey);
                
            //retour ajax
            return "OK";
        }
        
        //finalise une opération 
        function finaliserOperation () {
            
            $jinput = JFactory::getApplication()->input;
            $jsonParams = $jinput->get('params', '[]', 'STRING');
            $params = json_decode($jsonParams, true);
            $codeOperation = $params['codeOperation'];
            
            //la finalisation est un changement de statut de chaque facture, qui passe de 'preliminary' à '[vide]'.
            //ainsi le statut sera calculé automatiquement en fonction de l'état du règlement          
            $db = JFactory::getDbo(); 
            $query = $db->getQuery(true);
            $fields = array(
                $db->quoteName('#__invoices_invoices.status') . ' = ' . $db->quote('')
            );
            $conditions = array(
                $db->quoteName("#__invoices_invoices.external_type")." LIKE '%".ECaracObjet::ECaracObjetCodeOperation."=".$codeOperation."%'"
            );
            $query->update($db->quoteName('#__invoices_invoices'))->set($fields)->where($conditions);
            $db->setQuery($query);
            $result = $db->execute();
            
            //met le flag de finalisation sur l'opération
            $params = AmapHelper::chercherChampsCusto($codeOperation);
            $valeurFinalisation = array_search(LABEL_ETATFINALISATIONOPERATION,$params);
            if ($valeurFinalisation === false) {
                array_push($params, LABEL_ETATFINALISATIONOPERATION."=\"1\"");
            } else {
                $params[$valeurFinalisation] = LABEL_ETATFINALISATIONOPERATION."=\"1\"";
            }
            $paramsString = join(NEW_LINE,$params);
            
            //MAJ de la base
            $fields = array(
                $db->quoteName('#__eb_events.custom_fields') . ' = ' . $db->quote($paramsString)
            );
            $idOperation = AmapHelper::getOperationId($codeOperation);
            $conditions = array(
                $db->quoteName("#__eb_events.id")." = ".$idOperation
            );
            $query->update($db->quoteName('#__eb_events'))->set($fields)->where($conditions);
            $db->setQuery($query);
            $result = $db->execute();        
            
            //retour à la liste des operations à finaliser
            
            
        }
        
    }
    
?>